package com.carrental.vehicle.dto;

import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 车辆信息DTO
 */
@Data
public class VehicleDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID，新增时不需要传
     */
    private Long id;

    /**
     * 车辆名称
     */
    @NotBlank(message = "车辆名称不能为空")
    private String name;

    /**
     * 车辆品牌ID
     */
    @NotNull(message = "车辆品牌不能为空")
    private Long brandId;

    /**
     * 品牌名称
     */
    private String brandName;

    /**
     * 品牌Logo
     */
    private String brandLogo;

    /**
     * 车辆系列ID
     */
    @NotNull(message = "车辆系列不能为空")
    private Long seriesId;

    /**
     * 系列名称
     */
    private String seriesName;

    /**
     * 车辆类型（1-经济型，2-舒适型，3-豪华型，4-SUV，5-MPV）
     */
    @NotNull(message = "车辆类型不能为空")
    private Integer type;

    /**
     * 车型名称
     */
    private String typeName;

    /**
     * 车牌号
     */
    @NotBlank(message = "车牌号不能为空")
    private String licensePlate;

    /**
     * 座位数
     */
    @NotNull(message = "座位数不能为空")
    @Min(value = 1, message = "座位数最小为1")
    private Integer seats;

    /**
     * 变速箱类型（1-手动，2-自动）
     */
    @NotNull(message = "变速箱类型不能为空")
    private Integer transmissionType;

    /**
     * 排量
     */
    private String displacement;

    /**
     * 燃油类型（1-汽油，2-柴油，3-电动，4-混合动力）
     */
    @NotNull(message = "燃油类型不能为空")
    private Integer fuelType;

    /**
     * 日租金
     */
    @NotNull(message = "日租金不能为空")
    @Min(value = 0, message = "日租金不能小于0")
    private BigDecimal dailyRent;

    /**
     * 车辆状态（1-可用，2-已租，3-维修中，4-报废）
     */
    private Integer status;

    /**
     * 车辆颜色
     */
    private String color;

    /**
     * 出厂年份
     */
    private Integer productionYear;

    /**
     * 里程数
     */
    private Integer mileage;

    /**
     * 车辆图片
     */
    private String image;

    /**
     * 车辆描述
     */
    private String description;

    /**
     * 所属门店ID
     */
    @NotNull(message = "所属门店不能为空")
    private Long storeId;

    /**
     * 是否新车（0-否，1-是）
     */
    private Integer isNew;

    /**
     * 租赁次数
     */
    private Integer rentalCount;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
} 